'''
1： 如果两个自然数a和b，a的所有因子（比a小且能整除a的自然数）之和恰好等于b，并且b的所有因子之和恰好等于a，则称a和b为一对亲密数。
例如：220和284就是一对亲密数（amicable pair），因为，
220的因子有:1,2,4,5,10,11,20,22,44,55,110,加起来等于284
284的因子有:1,2,4,71,142,加起来正好等于220
（1）编写函数factor_sum，计算并返回自然数n的所有因子之和。例如，factor_sum(220)的返回值应该是284，factor_sum(284练习)的返回值应该是220。（提示：使用循环，穷举所有小于n的自然数）
（2）使用函数factor_sum，找出20000以内的所有亲密数对
'''
def factor_sum(e):
    c=0
    a=0
    for i in range(1,e):
        if e%i==0:
            c+=i
        a=c
    return a
print(factor_sum(220))

def factor_sum(e):
    c=0
    a=[]
    for i in range(1,e):
        if e%i==0:
            c+=i
    a.append(c)
    # for j in a:
    #     if

    return a
print(factor_sum(220))

import math


def fac(n):
    i = 2
    divisor_num = 1
    while i <= n // 2:
        if n % i == 0:
            divisor_num += i
        i += 1
    # print('{}的因子之和为:{}'.format(n, divisor_num))
    return divisor_num


# 判断是否为素数
# a的所有正因子和等于b，b的所有正因子和等于a，因子包括1但不包括本身，且a不等于b，则称a，b为亲密数对
# 按照亲密数对的定义，任意素数的全部因子之和都是1，很明显不应该构成亲密数对
def isPrime(n):
    if n == 1:
        return False
    square_root = int(math.sqrt(n))
    for i in range(2, square_root + 1):
        if n % i == 0:
            return False
    return True


def getNumberPairs(n):
    try:
        # 获取包括n以内的合数-->素数不构成亲密数对
        temp = [i for i in range(4, n + 1) if isPrime(i) != 1]
        for i in temp:
            j = fac(i)
            # 如果因子之和等于本身，则不会构成亲密数对
            if j not in temp or i == j:
                continue
            if fac(j) == i:
                print('{}-{}'.format(i, j))
                # 将其从temp列表删除，为了保证每个亲密数对只输出一次
                temp.remove(i)
    except Exception as e:
        raise e


n = int(input())
getNumberPairs(n)

# n = int(input())
# getNumberPairs(n)
if __name__ =='__main__':
    for i in range(3):
        n = int(input())
        getNumberPairs(n)
        print('*'*20)




